import router from "./router";
import store from "./store";
import { Message } from "element-ui";
import NProgress from "nprogress";
import "nprogress/nprogress.css";
import { getToken } from "@/utils/auth";
import Vue from "vue";
import detect from "@/utils/cureentAgent.js";
import { getTypeListFn } from "./router";
import {loadBMap} from '@/utils/baiduMap.js'//定位

NProgress.configure({ showSpinner: false });

const whiteList = ["/login", "/auth-redirect", "/bind", "/register"];

router.beforeEach((to, from, next) => {
  // if(['/wssregister', '/registerSucceed', "/wssagreement"].includes(to.path)){
  //   next()
  //   console.log(to.path,'走着走着走着走着走着走着走着走着');
  // }

  // 有Token的情况下跳转到搜索页
  if (to.path === "/Bm-personalCenter/login" && getToken()) {
    next({ path: "/Bm-tool/budget" });
  }

  // 判断是安卓还是ios平板
  Vue.prototype.$isDevice = detect();

  // if (getToken()) {
  //   to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
  //   /* has token*/
  //   if (to.path === '/login') {
  //     next({ path: '/' })
  //     NProgress.done()
  //   } else {
  //     if (store.getters.roles.length === 0) {
  //       // 判断当前用户是否已拉取完user_info信息
  //       store.dispatch('GetInfo').then(() => {
  //         store.dispatch('GenerateRoutes').then(accessRoutes => {
  //           // 根据roles权限生成可访问的路由表
  //           //
  //           // zheshi shei de

  //           router.addRoutes(accessRoutes) // 动态添加可访问路由表
  //           next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
  //         })
  //       }).catch(err => {
  //         store.dispatch('LogOut').then(() => {
  //           Message.error(err)
  //           next({ path: '/' })
  //         })
  //       })
  //     } else {
  //       next()
  //     }
  //   }
  // } else {
  //   // 没有token
  //   if (whiteList.indexOf(to.path) !== -1) {
  //     // 在免登录白名单，直接进入
  //     next()
  //   } else {
  //     next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
  //     NProgress.done()
  //   }
  // }

  NProgress.start();

  // 不等于前台并且不能与扫码注册且不等于扫码注册  当前是去后台并且有token
  // ['/wssregister', '/registerSucceed', "/wssagreement"] 通过微信扫码注册的
  if (
    !(
      to.path.startsWith("/Bm-") ||
      [
        "/wssregister",
        "/registerSucceed",
        "/wssagreement",
        "/searchShow",
        "/moblie",
        "/app",
        "/Bm-personalCenter/aboutUs"
      ].includes(to.path)
    ) ||
    getToken()
  ) {
    // console.log(getToken);

    if (!getToken()) {
      return;
    }
    if (store.getters.roles.length === 0) {
      // 判断当前用户是否已拉取完user_info信息
      store
        .dispatch("GetInfo")
        .then(() => {
          store.dispatch("GenerateRoutes").then(accessRoutes => {
            // 根据roles权限生成可访问的路由表
            //
            // zheshi shei de
            router.addRoutes(accessRoutes); // 动态添加可访问路由表
            NProgress.done();
            next({ ...to, replace: true }); // hack方法 确保addRoutes已完成
          });
        })
        .catch(err => {
          store.dispatch("LogOut").then(() => {
            // Message.error(err)
            next({ path: "/Bm-personalCenter/login" });
          });
        });
    }
    // 判断是否已有阿米巴预算服务
    if (!store.state.user?.budgetService?.id) {
      //获取阿米巴预算服务
      store.dispatch("getBudget").then(() => {});
    }
    // 判断是否已有圈员列表
    if (!store.state.user.circleStaffList.length) {
      // 获取圈员列表
      store.dispatch("getCircleStaffList").then(() => {});
    }
    // 判断是否已有阿米巴预算角色
    if (!store.state.user?.budgetRole?.id) {
      //获取阿米巴预算角色
      store.dispatch("getBudgetRole").then(() => {});
    }
    // 获取定位
    if(!store.state.user?.address?.city){
      window.initBaiduMapScript = () =>{
        console.log(BMap);
        store.dispatch("getAddress").then(() => {});
        }
      loadBMap('initBaiduMapScript');
      
    }

    next();
  } else {
    // 点击前台的菜单
    if (getToken()) {
      next(); //有token的情况
    } else {
      // 登录页和微信扫码的直接过
      if (
        to.path == "/Bm-personalCenter/login" ||
        [
          "/wssregister",
          "/registerSucceed",
          "/wssagreement",
          "/searchShow",
          "/moblie",
          "/app",
          "/Bm-personalCenter/aboutUs"
        ].includes(to.path)
      ) {
        next(); //当前是登录页的留在登录页
      } else {
        // 如果不在登录页就跳转到登录页 并提示
        Message({ type: "warning", message: "当前未登录，请登录！" });
        sessionStorage.setItem("fullPath", to.fullPath);
        //跳转到登录页，然后把登录之前的地址query.redirect 传过去,登录完成之后跳转
        next({ path: "/Bm-personalCenter/login" });
      }
    }
  }
});

// 路由守卫:保存点击登录前的链接，登录完成之后跳转回去
router.afterEach((to, from, next) => {
  if (from.fullPath == "/Bm-personalCenter/login" || from.fullPath == "/") {
    // 一开始在登录页的就去首页
    to.query.redirect = "/Bm-tool/budget";
    // next({
    //   path: '/Bm-search/searchAnswer'
    // })
  } else {
    // 保存历史记录 登录完成之后就回到之前的页面
    if (to.path == "/Bm-personalCenter/login") {
      to.query.redirect = from.fullPath;
    }
  }
  NProgress.done();
});
